// Title: Fibonacci Series


void main()
{

// Calculate 18 numbers starting with seed
int Seed ;
int Number ;

Seed = 6;
Number = 18;

_Fibonacci(Seed,Number);

_Exit();
}



/*c-g
 
          FIBONACCI FLOW CHART

Creation Date- 2/28/2025 

This routine calculates a series of numbers. Each new value is
equal to the sum of the previous two numbers.

The values are placed in memory and sent to a terminal display.
*/
 
void _Fibonacci(FirstNumber,NumberToCalculate)  //a-3
{
assign t1 FirstNumber
assign t1 Number
assign t2 NumberToCalculate
assign x27 last_value_temp 
assign x28 last_value 
assign x29 NumberToCalculate 
assign x30 mem_add
assign x31 last_value


//s- last_value = 0
add last_value,zero,zero

//s- Memory_Address = 0x2000
// lower 12 bits to 0
lui mem_add,0x2

//s- display "Fibonacci Series"
cout << "Fibonacci Series" << endl;  

Start:

//N-Finish  NumberToCalculate == 0 ?

beq NumberToCalculate,zero, Finish

//s- last_value_temp = Number
addi  last_value_temp, Number, 0   // previou = number

//s- Number = Number + last_value
add Number,Number,last_value

//s- log Number to memory
sw Number,0(mem_add)

//s- increment mem ptr
addi mem_add,mem_add,4

//s- Display Number
cout << x6 << endl;  

//s- last_value = last_value_temp
add last_value,last_value_temp,zero

//s- NumberToCalculate--
addi NumberToCalculate,NumberToCalculate,-1

//g-Start 
beq zero,zero, Start

Finish:


//s- Add 2 zeroes to mem for readability
sw zero,0(mem_add)

sw zero,4(mem_add)

//s- Display "Complete"
cout << "Complete"  << endl;

//x-
}

